﻿using System;
using System.Collections.Generic;
using System.Text;

namespace ThatsMeSDK.Core.Filter
{
    class HtmlSpecialCharachters
    {
        /// <summary>
        /// Special Char Directory
        /// Key = Named Value
        /// Value = UTF16 Index
        /// </summary>
        public Dictionary<string, int> HtmlSpecialChars { get; private set; }

        /// <summary>
        /// Initialize the Directory
        /// </summary>
        public HtmlSpecialCharachters()
        {
            //Initialize Directory
            HtmlSpecialChars = new Dictionary<string, int>();

            //Punctuation
            HtmlSpecialChars.Add("ndash", 8211);
            HtmlSpecialChars.Add("mdash", 8212);
            HtmlSpecialChars.Add("iexcl", 161);
            HtmlSpecialChars.Add("iquest", 191);
            HtmlSpecialChars.Add("quot", 34);
            HtmlSpecialChars.Add("ldquo", 8220);
            HtmlSpecialChars.Add("rdquo", 8221);
            HtmlSpecialChars.Add("lsquo", 8216);
            HtmlSpecialChars.Add("rsquo", 8217);
            HtmlSpecialChars.Add("laquo", 171);
            HtmlSpecialChars.Add("raquo", 187);
            HtmlSpecialChars.Add("rsaquo", 8250);
            HtmlSpecialChars.Add("nbsp", 160);

            //Symbols
            HtmlSpecialChars.Add("amp", 38);
            HtmlSpecialChars.Add("cent", 162);
            HtmlSpecialChars.Add("copy", 169);
            HtmlSpecialChars.Add("divide", 247);
            HtmlSpecialChars.Add("gt", 62);
            HtmlSpecialChars.Add("lt", 60);
            HtmlSpecialChars.Add("micro", 181);
            HtmlSpecialChars.Add("middot", 183);
            HtmlSpecialChars.Add("para", 182);
            HtmlSpecialChars.Add("plusmn", 177);
            HtmlSpecialChars.Add("euro", 8364);
            HtmlSpecialChars.Add("pound", 163);
            HtmlSpecialChars.Add("reg", 174);
            HtmlSpecialChars.Add("sect", 167);
            HtmlSpecialChars.Add("trade", 153);
            HtmlSpecialChars.Add("yen", 165);

            //Diacritics
            //A
            HtmlSpecialChars.Add("aacute", 225);
            HtmlSpecialChars.Add("Aacute", 193);
            HtmlSpecialChars.Add("agrave", 224);
            HtmlSpecialChars.Add("Agrave", 192);
            HtmlSpecialChars.Add("acirc", 226);
            HtmlSpecialChars.Add("Acirc", 194);
            HtmlSpecialChars.Add("aring", 229);
            HtmlSpecialChars.Add("Aring", 197);
            HtmlSpecialChars.Add("atilde", 227);
            HtmlSpecialChars.Add("Atilde", 195);
            HtmlSpecialChars.Add("auml", 228);
            HtmlSpecialChars.Add("Auml", 196);
            HtmlSpecialChars.Add("aelig", 230);
            HtmlSpecialChars.Add("AElig", 198);

            //C
            HtmlSpecialChars.Add("ccedil", 231);
            HtmlSpecialChars.Add("Ccedil", 199);

            //E
            HtmlSpecialChars.Add("eacute", 233);
            HtmlSpecialChars.Add("Eacute", 201);
            HtmlSpecialChars.Add("egrave", 232);
            HtmlSpecialChars.Add("Egrave", 200);
            HtmlSpecialChars.Add("ecirc", 234);
            HtmlSpecialChars.Add("Ecirc", 202);
            HtmlSpecialChars.Add("euml", 235);
            HtmlSpecialChars.Add("Euml", 203);

            //I
            HtmlSpecialChars.Add("iacute", 237);
            HtmlSpecialChars.Add("Iacute", 205);
            HtmlSpecialChars.Add("igrave", 236);
            HtmlSpecialChars.Add("Igrave", 204);
            HtmlSpecialChars.Add("icirc", 238);
            HtmlSpecialChars.Add("Icirc", 206);
            HtmlSpecialChars.Add("iuml", 239);
            HtmlSpecialChars.Add("Iuml", 207);

            //N
            HtmlSpecialChars.Add("ntilde", 241);
            HtmlSpecialChars.Add("Ntilde", 209);

            //O
            HtmlSpecialChars.Add("oacute", 243);
            HtmlSpecialChars.Add("Oacute", 211);
            HtmlSpecialChars.Add("ograve", 242);
            HtmlSpecialChars.Add("Ograve", 210);
            HtmlSpecialChars.Add("ocirc", 244);
            HtmlSpecialChars.Add("Ocirc", 212);
            HtmlSpecialChars.Add("oslash", 248);
            HtmlSpecialChars.Add("Oslash", 216);
            HtmlSpecialChars.Add("otilde", 245);
            HtmlSpecialChars.Add("Otilde", 213);
            HtmlSpecialChars.Add("ouml", 246);
            HtmlSpecialChars.Add("Ouml", 214);

            //S
            HtmlSpecialChars.Add("szlig", 223);

            //U
            HtmlSpecialChars.Add("uacute", 250);
            HtmlSpecialChars.Add("Uacute", 218);
            HtmlSpecialChars.Add("ugrave", 249);
            HtmlSpecialChars.Add("Ugrave", 217);
            HtmlSpecialChars.Add("ucirc", 251);
            HtmlSpecialChars.Add("Ucirc", 219);
            HtmlSpecialChars.Add("uuml", 252);
            HtmlSpecialChars.Add("Uuml", 220);
        }
    }
}
